<?php

\public\index.php
  基于
  $app = new Illuminate\Foundation\Application(
      realpath(__DIR__.'/../')
  );
    Application::$instance 就是 $this，也就是 $app。
    这个属性和 setInstance 方法都是继承自 Illuminate\Container\Container。
    实例方法 instance() 也是如此。
      这个方法需要两个参数，第一个参数以是一个字符串，或者一个数组，
        通常来说是一个带有命名空间的类或者接口，也可以是一个别名，因为看到了 'app'，暂时不知怎么用的。
      第二个参数一般是一个实例，但看到这个方法的文档注释中写的类型是 mixed，有点不理解。

    通过 $this->instance('app', $this);
    $this->instances 数组里中就有了一个元素：'app' => $this;
    同理，$this->instances 数组里中添加了一个 'Illuminate\Container\Container' => $this;
    为什么会需要两个key 指向同一个对象呢？

    继承自 Illuminate\Support\ServiceProvider 的类，都有一个属性 $app，值就是上面的 $this，也就是 $app。

    value() 函数是在 laravel/framework/src/Illuminate/Support/helpers.php 内定义的。

    $app->register(...); 会注册类、接口和对应的实例。
    以 Illuminate\Events\EventServiceProvider 为例，其内部的 register() 方法会在 $app->register() 执行时而执行。
    具体的就是在 $this->markAsRegistered($provider); 内执行的。$this 就是 $app，这是 Illuminate\Foundation\Application 的一个方法。

    通过 $this['events'] 或者 $this->events 就自动创建了实例。
    这是由于 Application 的父类 Container 实现了接口 ArrayAccess 的方法 offsetGet($key)，当访问属性时会执行这个方法。
    参数 $key 当然就是属性的名称了，这里就是 events。
    而实现的这个方法内部是调用了 $this->make($key); 进行创建对象的。

      顺便说下：
      register() 内调用 $app->singleton(), 后者调用 bind()。
      对 singleton() 两个类的字符串参数来说，第一个是大范围的比如接口、父类等，第二个则是具体的实现类也就是可以实例化的。
      此时，会通过 getClosure() 方法，强行返回一个闭包，所以 singleton() 最终效果就是绑定了获取实现类对象的闭包。
      然后在需要时，通过 make() 使用这个闭包创建实例。
      典型案例就是：\bootstrap\app.php 中的三个绑定，测试的是
        $app->singleton(
          Illuminate\Contracts\Http\Kernel::class,
          App\Http\Kernel::class
        );

    单例的闭包，在 build() 方法中执行，然后继续在 make() 方法中给 $this->instances 添加一个元素，正是 events 和闭包执行后返回的结果。

  得到 $app 后，
  $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
  之前已经在 \bootstrap\app.php 中使用
  $app->singleton(
      Illuminate\Contracts\Http\Kernel::class,
      App\Http\Kernel::class
  );
  绑定了 Illuminate\Contracts\Http\Kernel::class（这是一个初始的接口，没有继承其他接口） 实现类为
  App\Http\Kernel::class。
  所以这里通过 make() 就得到了 App\Http\Kernel::class 的一个实例 $kernel。

  然后
  $response = $kernel->handle(
      $request = Illuminate\Http\Request::capture()
  );
  处理请求。
    其中先看下请求对象的具体情况
    $request = Illuminate\Http\Request::capture()
//
